// websocket 初始化
var websokcetJson = {};
// ipAddress 为ip:port, 例如：192.168.1.114：8080
function websocketInit(ipAddress){
  var wsOrWss = window.location.protocol == 'https:' ? 'wss://' : 'ws://';
  var apiAddress = '/app/ws'; // 接口地址
  var websocketAgainNumber = 0; // 重连次数
  if ('WebSocket' in window) {
    // 进行websocket链接
    websokcetJson[ipAddress] = new WebSocket(wsOrWss + ipAddress + apiAddress);
  } else {
    this.warningInfo('当前浏览器不支持websocket');
  }

  // 出现错误之后，重新链接。重新链接三次
  websokcetJson[ipAddress].onerror = function () {
    alert("页面断开链接，请刷新页面重试"); // 因为后台session的原因，这里不再重连，直接提示报错
    // websocketAgainNumber++
    // if (websocketAgainNumber <= 3) {
    //   websokcetJson[ipAddress] = new WebSocket(wsOrWss + ipAddress + apiAddress);
    // }
  }
  // websocket链接成功
  websokcetJson[ipAddress].onopen = function () {
    // 
    websokcetJson[ipAddress].setInter = setInterval(()=>{
      wbsend(ipAddress, {
        cmd: "sensetech"
      })
    }, 50 * 1000)
  }
  // websocket链接关闭
  websokcetJson[ipAddress].onclose = function () {
    
    // websocketAgainNumber++
    // if (websocketAgainNumber <= 3) {
    //   websokcetJson[ipAddress] = new WebSocket(wsOrWss + ipAddress + apiAddress)
    // }
  }
  // websocket接收到事件之后，触发其中的函数
  websokcetJson[ipAddress].onmessage = function(res){
    if(websokcetJson[ipAddress].hasOwnProperty(["tag"])){
      websokcetJson[ipAddress]["tag"](res);
    }
  }
}
// 发送数据
function wbsend(ipAddress, message) {
  try {
    websokcetJson[ipAddress].send(JSON.stringify(message));
    // 判断是取消订阅的话，把其中绑定的函数删除
    if(message.hasOwnProperty("cmd") && message.cmd == "unsubscribe"){
      delete websokcetJson[ipAddress]["tag"];
      clearInterval(websokcetJson[ipAddress]["setInter"])
    }
    clearTimeout(websokcetJson.timeOut);
  } catch(err) {  // 信息发送失败，两秒钟之后重新发送
    if(websokcetJson.timeOut < 10 || !websokcetJson.timeOut){
      websokcetJson.timeOut = setTimeout(()=>{
        wbsend(ipAddress, message);
      }, 200)
    }
  }
}


// 接受数据，其中tag为数字，表示是第几个数字。callback是回调函数
function wbaccept(ipAddress, callback){
  websokcetJson[ipAddress]["tag"] = callback;
}
export  {websokcetJson, websocketInit, wbsend, wbaccept};